import requests
from tqdm import tqdm

# ohsome API endpoint for geometry data
url = "https://api.ohsome.org/v1/elements/geometry"

# Define the bounding polygon for the Black Sea region.
# Format: <customID>:<lon1>,<lat1>,<lon2>,<lat2>,...,<lonN>,<latN>
# The coordinates (27,39), (27,47), (45,47), (45,39) define a rectangle.
bpolys_coords = "BlackSea:27,39,27,47,45,47,45,39,27,39"

# Set up the parameters:
# - time: snapshot date (November 2020)
# - filter: select features with man_made either communications_tower or mast
params = {
    "time": "2024-11-01",
    "filter": "man_made in (communications_tower,mast)",
    "bpolys": bpolys_coords
}

# Make a streaming request so we can monitor download progress.
with requests.get(url, params=params, stream=True) as r:
    r.raise_for_status()  # Raise an error if the request failed.
    
    # Retrieve the total file size from headers if available.
    total_size = int(r.headers.get('content-length', 0))
    
    # Open the output file in binary mode.
    with open("comms_towers_blacksea_2020-11.json", "wb") as f, tqdm(
            total=total_size, unit='B', unit_scale=True, desc="Downloading"
    ) as progress_bar:
        # Download the data in chunks.
        for chunk in r.iter_content(chunk_size=1024):
            if chunk:  # Filter out keep-alive chunks.
                f.write(chunk)
                progress_bar.update(len(chunk))

print("Download complete! The communications towers (and masts) data has been saved to 'comms_towers_blacksea_2020-11.json'.")
